package com.gitee.deament.server.core.cli.db.hash;

import com.gitee.deament.server.config.SystemConfig;
import com.gitee.deament.server.core.annotation.CliHander;
import com.gitee.deament.server.core.cli.AbstractCli;
import com.gitee.deament.server.core.data.ConnectData;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 * HKEYS
 * HKEYS key
 *
 * 返回哈希表 key 中的所有域。
 *
 * 可用版本：
 * >= 2.0.0
 *
 * 时间复杂度：
 * O(N)， N 为哈希表的大小。
 *
 * 返回值：
 * 一个包含哈希表中所有域的表。
 * 当 key 不存在时，返回一个空表。
 * @author deament
 */
@CliHander(command = "HKEYS")
public class HKEYScli extends AbstractCli {
    @Override
    public void executeCli(ChannelHandlerContext channelHandlerContext, String command) {
        List<String> values = getValues(command);
        if (values.size() != 2) {
            channelHandlerContext.channel().writeAndFlush(new TextWebSocketFrame("ERR wrong number of arguments for 'HKEYS' command"));
            return;
        }
        int db = ConnectData.SELECT_DB_STORAGE.getUseDB(channelHandlerContext.channel().id().asLongText());
        Set<String> hashKeys = SystemConfig.dbData.getHashKeys(db);
        StringBuilder msg= new StringBuilder();
        Iterator<String> iterator = hashKeys.iterator();
        if(iterator.hasNext()){
            msg.append(iterator.next()+"\r\n");
        }
        channelHandlerContext.channel().writeAndFlush(new TextWebSocketFrame(msg.toString()));

    }


}
